﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace HospitalAdmision
{
    public partial class cobro : Form
    {
        ProyHospitalEntities Bd = new ProyHospitalEntities();
        //declaro el total de los cargos
        int Total;


        public cobro()
        {
            InitializeComponent();

        }
        //Rut
        public static string rut;

     
        private void Form1_Load(object sender, EventArgs e)
        {
            // TODO: esta línea de código carga datos en la tabla 'hospitalDataSet1.Cargos' Puede moverla o quitarla según sea necesario.

        }

        private void buscar_Click_1(object sender, EventArgs e)
        {

            string rut = txt_busqueda_rut.Text;
            ProyHospitalEntities db = new ProyHospitalEntities();
            //busco los registros del paciente segun el rut ingresado en en textbox
            Paciente paciente = db.Paciente.FirstOrDefault(p => p.rut == rut);

            if (paciente == null)
            {
                MessageBox.Show("Registro no encontrado");
                lbl_cambiar.Enabled = false;
                btn_generar.Enabled = false;
                txt_apellidos.Text = "";
                txt_debe.Text = "";
                txt_forma_pago.Text = "";
                txt_nombres.Text = "";
                txt_total_cuota.Text = "";
                txt_total.Text = "";

            }
            else
            {
                txt_nombres.Text = paciente.nombres;
                txt_apellidos.Text = paciente.apePaterno;
                txt_forma_pago.Text = paciente.formaPago;
                lbl_cambiar.Enabled = true;
                btn_generar.Enabled = true;
            }

            //busco en la factura la cantidad que debe


            Factura fact = db.Factura.FirstOrDefault(f => f.FK_rut == rut);
            //busco si el paciente tiene monto por pagar
            if (fact == null)
            {
                txt_debe.Text = "0";
                txt_montoA_pagar.Text = "0";
                txt_total_cuota.Text = "0";
                ComboBox1.Enabled = true;
            }
            else
            {
                txt_debe.Text = Convert.ToString(fact.montoporPagar);
                txt_total_cuota.Text = Convert.ToString(fact.totalenCuotas);
                txt_cuotas.Text = Convert.ToString(fact.cuotas);
                txt_montoA_pagar.Text = Convert.ToString(fact.totalenCuotas);
                ComboBox1.Enabled = false;
            }

            //-------------------------------------------------------------------------------------------------------
            // lo MISMO QUE ARRIBA

            /*if (fact.Total_EnCuotas== null)
            {
                MessageBox.Show(Convert.ToString(fact.Total_EnCuotas));
                txt_total_cuota.Text = "0";
            }
            else
            {
                txt_total_cuota.Text = Convert.ToString(fact.Total_EnCuotas);
            }*/
            //------------------------------------------------------------------------------------------------------------          

            /* if (fact.Cuotas == null)
             {
                 ComboBox1.SelectedIndex = 0;
             }
             else
             {
                 ComboBox1.Enabled = false;
                 ComboBox1.SelectedIndex = Convert.ToInt32(fact.Cuotas)-1;
             }
          */
            //-------------------------------------------------------------------------------------------------------        

            //Sumo todos los cargos del rut ingresado y los almaceno en txt_total
            var total = (
            from c in Bd.Cargos
            where c.FK_rut == rut
            select c);

            foreach (var c in total)
            {
                Total = (Convert.ToInt32(total.Sum(a => a.monto)));
                txt_total.Text = (Convert.ToString(total.Sum(a => a.monto)));
            }

            //si es efectivo el total a pagar siempre sera el valor total ya que no existen cuotas
            if (txt_forma_pago.Text == "Efectivo")
            {
                txt_montoA_pagar.Text = txt_total.Text;
            }

            //cargo el grid view con los cargos segun el rut ingresado
            this.cargosTableAdapter.FillBy(this.proyHospitalDataSet1.Cargos, txt_busqueda_rut.Text);
        }

        private void ComboBox1_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            //se calcula el valor del total dependiendo de la cuota
            if (ComboBox1.SelectedIndex != 0)
            {
                int cuotas = Convert.ToInt32(Total) / Convert.ToInt32(ComboBox1.SelectedItem);
                //le entrego la cantidad calculada en el text box total
                txt_total_cuota.Text = Convert.ToString(cuotas);
                if (txt_forma_pago.Text == "Efectivo")
                {
                    txt_montoA_pagar.Text = txt_total.Text;
                }
  
            }
            else
            {
                ComboBox1.SelectedIndex = 0;
            }
        }

        private void txt_forma_pago_TextChanged_1(object sender, EventArgs e)
        {
            //si la forma de pago es Tarjeta o Cheque las cuotas del combobox se activan
            if (txt_forma_pago.Text != "Efectivo")
            {
                ComboBox1.Enabled = true;
            }
            else
            {
                ComboBox1.SelectedIndex = 0;
                ComboBox1.Enabled = false;
            }
           
        }

        private void lbl_cambiar_LinkClicked_1(object sender, LinkLabelLinkClickedEventArgs e)
        {
            rut = txt_busqueda_rut.Text;
            Cambiar_pago Cambiar = new Cambiar_pago();
            Cambiar.Show();
        }

        private void Button1_Click_1(object sender, EventArgs e)
        {
            reporte r = new reporte();
            rut = txt_busqueda_rut.Text;
            Factura factura = new Factura();
            Factura fact = Bd.Factura.FirstOrDefault(f => f.FK_rut == rut);


            //pregunto si la tabla factura esta vacia si es asi le ingreso los datos
            if (fact == null)
            {

                factura.FK_rut = txt_busqueda_rut.Text;
                factura.total = Total;
                factura.montoPagado = Convert.ToInt32(txt_montoA_pagar.Text);
                factura.montoporPagar = Convert.ToInt32(txt_total.Text) - Convert.ToInt32(txt_montoA_pagar.Text);
                factura.totalenCuotas = Convert.ToInt32(txt_total_cuota.Text);
                factura.cuotas = Convert.ToInt32(ComboBox1.SelectedItem);
                factura.fecha = DateTime.Today;
                Bd.Factura.Add(factura);
                Bd.SaveChanges();
                
                txt_busqueda_rut.Clear();
                txt_nombres.Clear();
                txt_apellidos.Clear();
                btn_generar.Enabled = false;
                MessageBox.Show("Datos guardados!");
                //Veo la factura para imprimir
                r.Show();

            }
            //de lo contrario
            else
            {
                //pregunto si el paciente tiene deudas por pagar
                if (fact.montoPagado == fact.total)
                {
                    if (MessageBox.Show("El paciente no tiene deudas por pagar ¿Desea Ver la factura?", "¿Ver factura?", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        //Veo la factura para imprimir
                        r.Show();
                    }
                }
                else
                {
                    //pregunto si en la tabla factura el valor de cuotas no es nulo actualizo los datos
                    if (fact.cuotas != null)
                    {

                        fact.montoporPagar = fact.montoporPagar - Convert.ToInt32(txt_montoA_pagar.Text);
                        if (fact.montoporPagar == 1)
                        {
                            fact.montoporPagar = 0;
                        }
                        fact.cuotas--;
                        Bd.SaveChanges();
                        txt_busqueda_rut.Clear();
                        txt_nombres.Clear();
                        txt_apellidos.Clear();
                        btn_generar.Enabled = false;
                        MessageBox.Show("Datos cambiados!");
                    }
                    //pregunto si monto pagado no es nulo,si es asi actualizo
                    if (fact.montoPagado != null)
                    {
                        fact.montoPagado = (fact.montoPagado) + (Convert.ToInt32(txt_montoA_pagar.Text));
                        Bd.SaveChanges();
                    }

                    //Veo la factura para imprimir
                    r.Show();
                }

            }
        }

        private void txt_busqueda_rut_TextChanged_1(object sender, EventArgs e)
        {
            if (txt_busqueda_rut.Text == "")
            {
                txt_apellidos.Text = "";
                txt_debe.Text = "";
                txt_forma_pago.Text = "";
                txt_nombres.Text = "";
                txt_total_cuota.Text = "";
                txt_total.Text = "";
                ComboBox1.SelectedIndex = 0;

            }
        }
    }
}
